#ifndef __INC_EXT_SBMNE_HS_H__
#define __INC_EXT_SBMNE_HS_H__

#ifdef _MSC_VER
#pragma once
#endif

//////////////////////////////////////////////////////////////////////////
// hs's mnemonic
enum khMnemonic
{
	KHMNE_NOP,

	KHMNE_POS,				// unary plus
	KHMNE_NEG,				// unary minus
	KHMNE_SIG,
	KHMNE_NOT,
	KHMNE_INC,
	KHMNE_DEC,

	KHMNE_MUL,
	KHMNE_DIV,
	KHMNE_MOD,
	KHMNE_ADD,
	KHMNE_SUB,
	KHMNE_SHL,
	KHMNE_SHR,
	KHMNE_BLT,
	KHMNE_BLE,
	KHMNE_BEQ,
	KHMNE_BNE,
	KHMNE_AND,
	KHMNE_XOR,
	KHMNE_OR,

	KHMNE_STELEM,
	KHMNE_LDELEM,
	KHMNE_STFLD,
	KHMNE_LDFLD,

	KHMNE_BR,				// jump
	KHMNE_BRZ,				// if zero, jump
	KHMNE_BRNE,				// =BRZ, if not equal, for comparer's compare
	KHMNE_BRNZ,				// if not zero, jump
	KHMNE_BRE,				// =BRNZ, if equal, for comparer's compare

	KHMNE_STPUB,
	KHMNE_STMEM,
	KHMNE_STLOC,

	KHMNE_LDPUB,
	KHMNE_LDMEM,
	KHMNE_LDLOC,

	KHMNE_LDNULL,
	KHMNE_LDFALSE,
	KHMNE_LDTRUE,

	KHMNE_LDC_I_0,
	KHMNE_LDC_I_1,
	KHMNE_LDC_I_2,
	KHMNE_LDC_I_3,
	KHMNE_LDC_I_4,
	KHMNE_LDC_I_5,
	KHMNE_LDC_I_6,
	KHMNE_LDC_I_7,
	KHMNE_LDC_I_8,

	KHMNE_LDC_I4,
	KHMNE_LDC_I8,

	KHMNE_LDC_R4,
	KHMNE_LDC_R8,

	KHMNE_LDSYM,

	KHMNE_LDSELF,
	KHMNE_LDSTR,
	KHMNE_LDWCS,
	KHMNE_LDFN,

	KHMNE_POP,
	KHMNE_DUP,

	KHMNE_END,
	KHMNE_RET,
	KHMNE_CALL,

	KHMNE_PREPEACH,
	KHMNE_DISPEACH,
	KHMNE_LOOPEACH_DBL,
	KHMNE_LOOPEACH_SGL,

	KHMNE_SELECT,
	KHMNE_PREPSELECT,
	KHMNE_DISPSELECT,
	KHMNE_BRSELECT,

	KHMNE_NEWOBJ,
	KHMNE_NEWTABLE,
	KHMNE_NEWARRAY,
	KHMNE_NEWCLASS,
	KHMNE_NEWSTRUCT,
	KHMNE_NEWENUM,
	KHMNE_NEWDEF,

	HB_MNE_ALIAS,
	KHMNE_TBLELEM,

	KHMNE_TEXT,
	KHMNE_SIZEOF,
	KHMNE_TYPENAME,
	KHMNE_LINE,
	KHMNE_BREAKPOINT,
	KHMNE_SUSPEND,

	KHMNE_T_IFELSE,			// tmp, if's else
	KHMNE_T_AND,			// tmp, logical and
	KHMNE_T_OR,				// tmp, logical or

	KHMNE_DONOTUSETHIS,

	KHMNE_A,
};

#endif	// __INC_EXT_SBMNE_HS_H__
